home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Basic / BlitzPlay / bin / FutureComposer.s < prev    next >
Encoding:
Text File  |  1992-09-02  |  8.3 KB  |  654 lines

  1.  
  2. BRA MUSON ;requires memadr in a0
  3. BRA DRIVER
  4. BRA MUSOFF
  5.  
  6. ;*******************************************************************
  7. ;*
  8. ;* Future Composer Music Driver v1.02  Do the following To play
  9. ;* your tune:
  10. ;*
  11. ;* JSR MUSON  = prepare tune For play
  12. ;* JSR DRIVER = play tune (Call from your Interrupt)
  13. ;* JSR MUSOFF = clear out all Sound Registers (Tune is over)
  14. ;*
  15. ;*******************************************************************
  16.  
  17. .MUSON:
  18.   MOVE.l a0,d0
  19.   ADDI.l #4,d0
  20.   MOVE.l d0,TRK0
  21.   ADDI.L #$400,d0
  22.   MOVE.L d0,BLOX
  23.   ADDI.L #$4004,d0
  24.   MOVE.L d0,DIGBLOK
  25.   ADDI.L #$3F4,d0
  26.   MOVE.L d0,DIGIDAT
  27.   MOVE.L DIGIDAT,a0 ;BASE ADDRESS OF DIGIS
  28.   MOVE.L DIGBLOK,a1
  29.   MOVE.W #63,D0
  30.  
  31. .PRPLOOP:
  32.   MOVE.L A0,(a1)
  33.   ADD.L 4(a1),A0
  34.   MOVE.l a1,d1
  35.   ADDI.L #16,d1
  36.   DBF D0,PRPLOOP
  37.   MOVE.W #2,TEMPO
  38.   MOVE.L #$00100010,D0
  39.   MOVE.L D0,DUR0
  40.   MOVE.L D0,DUR0+4
  41.   LSR.L #4,D0
  42.   MOVE.L D0,RP0
  43.   MOVE.L D0,RP0+4
  44.   MOVE.L #$FFFFFFFF,D0
  45.   MOVE.L D0,BF0
  46.   MOVE.L D0,BF0+4
  47.   LEA CDUR0,A0
  48.   MOVE.W #36,D0
  49.  
  50. .CLDRVS:
  51.   CLR.W (A0)+
  52.   DBF D0,CLDRVS
  53.   RTS
  54.  
  55. .MUSOFF:
  56.   MOVE.W #$000F,$DFF096
  57.   LEA $DFF0A0,A0
  58.   CLR.W $8(A0)
  59.   CLR.W $18(A0)
  60.   CLR.W $28(A0)
  61.   CLR.W $38(A0)
  62.   RTS
  63.  
  64. ;********** THE ALMIGHTY INTERRUPT **********
  65.  
  66. .IRQ:
  67.   MOVEM.L D0-D7/A0-A6,-(A7)
  68.   MOVE $DFF01E,D1
  69.   BTST #4,D1
  70.   BNE IREXIT
  71.   BSR DRIVER
  72.  
  73. .IREXIT:
  74.   MOVE #$70,$DFF09C
  75.   MOVEM.L (A7)+,D0-D7/A0-A6
  76.   RTE
  77.  
  78. ;********** Let THE MUSIC PLAY... **********
  79.  
  80. .DRIVER:
  81.   TST.W SONPLAY
  82.   BNE DMOFF
  83.   SUBI.W #1,TMCNT
  84.   BPL DRVEX
  85.   MOVE.W TEMPO,TMCNT
  86.   MOVEQ #3,D5
  87.  
  88. .DRVLP:
  89.   BSR DRIVOI
  90.   DBF D5,DRVLP
  91.  
  92. .DRVEX:
  93.   RTS
  94.  
  95. .DMOFF:
  96.   MOVE.W #$000F,$DFF096
  97.   RTS
  98.  
  99. ;********** DRIVE VOICE D5.B **********
  100.  
  101. .DRIVOI:
  102.   CLR.W INFCHK
  103.   LEA $DFF0A0,A4
  104.   MOVE.W D5,D6
  105.   ASL.W #1,D6
  106.   MOVE.W D5,D7
  107.   ASL.W #4,D7
  108.   LEA GLDUD(PC),A3
  109.  
  110.   ADD.w d6,a3
  111.   TST.w (a3)
  112. ;  TST.W (A3,D6.W)
  113.  
  114.   BEQ DODRIVE
  115.   SUB.w d6,a3
  116.   LEA DETUN0(PC),A2
  117.  
  118.   MOVE.w a2,d1
  119.   ADD.w d6,d1
  120. ;  MOVE.W (A2,D6.W),D1
  121.  
  122.   ADD.w d6,a3
  123.   TST.w (a3)
  124. ;  TST.W (A3,D6.W)
  125.  
  126.   BMI GLIDEUP
  127.   NEG.W D1
  128.  
  129. .GLIDEUP:
  130.   SUB.w d6,a3
  131.   LEA PERVAL(PC),A3
  132.  
  133.   ADD.w a3,d1
  134.   ADD.w d6,d1
  135. ;  ADD.W (A3,D6.W),D1
  136.  
  137.   ANDI.L #$FFFF,D1
  138.   CMPI.L #127,D1
  139.   BGT CHKDGL
  140.   MOVE.W #127,D1
  141.  
  142. .CHKDGL:
  143.   CMPI.L #$0800,D1
  144.   BLT NOCHKP
  145.   MOVE.W #$0800,D1
  146.  
  147. .NOCHKP:
  148.  
  149.   MOVE.w d1,6(a4)
  150.   ADD.w d7,6(a4)
  151. ;  MOVE.W D1,6(A4,D7.W)
  152.  
  153.   MOVE.w d1,a3
  154.   ADD.w d6,a3
  155. ;  MOVE.W D1,(A3,D6.W)
  156.  
  157.   ADD.w d6,a3
  158.  
  159. .DODRIVE:
  160.   SUB.w d6,a3
  161.   LEA 1+BF0(PC),A3
  162.  
  163.   ADD.w d6,a3
  164.   CMPI.b #$ff,(a3)
  165. ;  CMPI.B #$FF,(A3,D6.W)
  166.  
  167.   BNE BLGO
  168.   SUB.w d6,a3
  169.  
  170. .BEGBLK:
  171.   LEA BF0(PC),A3
  172.  
  173.   CLR.w (a3)
  174. ;  CLR.W (A3,D6.W)
  175.  
  176.   LEA RP0(PC),A3
  177.  
  178.   ADD.w d6,a3
  179.   SUBI.w #1,(a3)
  180. ;  SUBI.W #1,(A3,D6.W)
  181.  
  182.   BNE BLGO
  183.   SUB.w d6,a3
  184.  
  185. .NXV:
  186.   LEA RP0(PC),A3
  187.  
  188.   MOVE.w #1,a3
  189. ;  MOVE.W #1,(A3,D6.W)
  190.  
  191. .NXVA:
  192.   ADDI.W #1,INFCHK  ;THIS TRAPS AN FF VALUE IN
  193.   BTST #8,INFCHK    ;POSITION 0 OF EACH TRACK...
  194.   BNE SONEND
  195.   CLR.L D0
  196.   MOVE.W D5,D0
  197.   ASL.W #8,D0
  198.   MOVE.L TRK0,A0
  199.   ADD.L D0,A0
  200.   LEA V0(PC),A3
  201.  
  202.   MOVE.w a3,d0
  203.   ADD.w d6,d0
  204. ;  MOVE.W (A3,D6.W),D0
  205.  
  206.   CLR.W D1
  207.  
  208.   MOVE.b a0,d1
  209.   ADD.w d0,d1
  210. ;  MOVE.B (A0,D0.W),D1
  211.  
  212.   CMPI.W #$40,D1
  213.   BLT FBL
  214.   CMPI.W #$80,D1
  215.   BLT RPX
  216.   CMPI.W #$FB,D1
  217.   BGT CTR
  218.   CMPI.B #$BF,D1
  219.   BGT FILTMOD
  220.  
  221. .TRXPOSE:
  222.   ANDI.W #$3F,D1
  223.   CMPI.W #35,D1
  224.   BGT FILTMOD
  225.   LEA TRX0(PC),A3
  226.  
  227.   MOVE.w d1,a3
  228. ;  MOVE.W D1,(A3,D6.W)
  229.  
  230.   BRA VINC
  231.  
  232. .FILTMOD:
  233.   MOVE.B $BFE001,D0
  234.   ANDI.B #$FD,D0
  235.   ANDI.B #1,D1  ;MODIFY FILTER...
  236.   ASL.B #1,D1
  237.   OR.B D1,D0
  238.   MOVE.B D0,$BFE001
  239.  
  240. .VINC:
  241.   LEA 1+V0(PC),A3
  242.  
  243.   ADDI.b #1,(a3)
  244. ;  ADDI.B #1,(A3,D6.W)
  245.  
  246.   BRA NXVA
  247.  
  248. .RPX:
  249.   SUBI.W #$3F,D1
  250.   LEA RP0(PC),A3
  251.  
  252.   MOVE.w d1,a3
  253. ;  MOVE.W D1,(A3,D6.W)
  254.  
  255.   BRA VINC
  256.  
  257. .FBL:
  258.   LEA 1+V0(PC),A3
  259.  
  260.   ADDI.b #1,(a3)
  261. ;  ADDI.B #1,(A3,D6.W)
  262.  
  263.   LEA 1+BLK0(PC),A3
  264.  
  265.   MOVE.b d1,a3
  266. ;  MOVE.B D1,(A3,D6.W)
  267.  
  268.   BRA BLGO
  269.  
  270. .CTR:
  271.   CMPI.B #$FC,D1
  272.   BEQ VOL
  273.   CMPI.B #$FD,D1
  274.   BEQ GT
  275.   CMPI.B #$FE,D1
  276.   BEQ SONEND
  277.   CMPI.B #$FF,D1
  278.   BNE VINC
  279.   LEA V0(PC),A3 ;THE $FF BYTE
  280.  
  281.   CLR.w (a3)
  282. ;  CLR.W (A3,D6.W)
  283.  
  284.   BRA NXV
  285.  
  286. .SONEND:
  287.   ST SONPLAY
  288.   RTS
  289.  
  290. .VOL:
  291.   ADDI.B #1,D0
  292.   LEA 1+V0(PC),A3
  293.  
  294.   MOVE.b d0,a3
  295. ;  MOVE.B D0,(A3,D6.W)
  296.  
  297.   MOVE.b a0,d1
  298.   ADD.w d0,d1
  299. ;  MOVE.B (A0,D0.W),D1
  300.  
  301.   MOVE.w d1,8(a4) ;SET VOLUME...
  302. ;  MOVE.W D1,8(A4,D7.W)
  303.  
  304.   LEA VOL0(PC),A3
  305.  
  306.   MOVE.w d1,a3
  307. ;  MOVE.W D1,(A3,D6.W)
  308.  
  309.   BRA VINC
  310.  
  311. .GT:
  312.   ADDI.B #1,D0
  313.   LEA 1+V0(PC),A3
  314.  
  315.   MOVE.b a0,a3
  316.   ADD.w d0,a3
  317. ;  MOVE.B (A0,D0.W),(A3,D6.W)
  318.  
  319.   BRA NXV
  320.  
  321. .BLGO:
  322.   SUB.w d6,a3
  323.   LEA CDUR0(PC),A3
  324.  
  325.   SUBI.w #1,(a3)
  326. ;  SUBI.W #1,(A3,D6.W)
  327.  
  328.   BEQ BLDO
  329.   BMI BLDO
  330.   RTS
  331.  
  332. .BLDO:
  333.   ADDI.W #1,INFCHK  ;ENDS SONG IF AN INFINITE
  334.   BTST #8,INFCHK    ;LOOP IS FOUND...
  335.   BNE SONEND
  336.   LEA BF0(PC),A3
  337.  
  338.   MOVE.w a3,d0
  339.   ADD.w d6,d0
  340. ;  MOVE.W (A3,D6.W),D0
  341.  
  342.   LEA BLK0(PC),A3
  343.  
  344.   MOVE.w a3,d1
  345.   ADD.w d6,d1
  346. ;  MOVE.W (A3,D6.W),D1
  347.  
  348.   ASL.W #8,D1
  349.   ADD.W D1,D0
  350.   MOVE.L BLOX,A0
  351.   CLR.W D1
  352.  
  353.   MOVE.b a0,d1
  354.   ADD.w d0,d1       ;VAL IN THE BLOCK...
  355. ;  MOVE.B (A0,D0.W),D1
  356.  
  357.   CMPI.B #$FF,D1
  358.   BEQ BEGBLK
  359.   CMPI.W #$30,D1
  360.   BLT PNOT
  361.   CMPI.W #$70,D1
  362.   BLT DETFIX
  363.   CMPI.W #$80,D1
  364.   BLT TEMFIX
  365.   CMPI.W #$C0,D1
  366.   BLT DURFIX
  367.   ANDI.W #$3F,D1    ;GET SOUND NR.
  368.   LEA SN0(PC),A3
  369.  
  370.   MOVE.w d1,a3
  371. ;  MOVE.W D1,(A3,D6.W)
  372.  
  373. .NXBF:
  374.   LEA 1+BF0(PC),A3
  375.  
  376.   ADDI.b #1,(a3)
  377. ;  ADDI.B #1,(A3,D6.W)
  378.  
  379.   BRA BLDO
  380.  
  381. .TEMFIX:
  382.   ANDI.W #$0F,D1
  383.   MOVE.W D1,TEMPO
  384.   BRA NXBF
  385.  
  386. .DETFIX:
  387.   LEA GLDUD(PC),A3
  388.   SUBI.W #$30,D1
  389.   CMPI.B #$3D,D1
  390.   BEQ DNGLD
  391.   CMPI.B #$3E,D1
  392.   BEQ NOGLD
  393.   CMPI.B #$3F,D1
  394.   BEQ UPGLD
  395.   ASL.W #1,D1
  396.   LEA DETUN0(PC),A3
  397.  
  398.   MOVE.w d1,a3
  399. ;  MOVE.W D1,(A3,D6.W)
  400.  
  401.   BRA NXBF
  402.  
  403. .DNGLD:
  404.  
  405.   MOVE.w #$ffff,a3
  406. ;  MOVE.W #$FFFF,(A3,D6.W)
  407.  
  408.   BRA NXBF
  409.  
  410. .NOGLD:
  411.  
  412.   CLR.w (a3)
  413. ;  CLR.W (A3,D6.W)
  414.  
  415.   BRA NXBF
  416.  
  417. .UPGLD:
  418.  
  419.   MOVE.w #$0001,a3
  420. ;  MOVE.W #$0001,(A3,D6.W)
  421.  
  422.   BRA NXBF
  423.  
  424. .DURFIX:
  425.   ANDI.W #$3F,D1
  426.   TST.B D1
  427.   BNE DUROK
  428.   MOVE.B #$40,D1
  429.  
  430. .DUROK:
  431.   LEA DUR0(PC),A3
  432.  
  433.   MOVE.w d1,a3
  434. ;  MOVE.W D1,(A3,D6.W)
  435.  
  436.   BRA NXBF
  437.  
  438. .PNOT:
  439.   MOVE.W D5,D4
  440.   ASL.W #1,D4
  441.   LEA DMA(PC),A3
  442.  
  443.   MOVE.w a3,DMV
  444.   ADD.w d4,DMV
  445. ;  MOVE.W (A3,D4.W),DMV
  446.  
  447.   MOVE.L DIGBLOK,A1
  448.   LEA SN0(PC),A3
  449.  
  450.   MOVE.w a3,d0
  451.   ADD.w d6,d0
  452. ;  MOVE.W (A3,D6.W),D0
  453.  
  454.   ASL.W #4,D0
  455.  
  456.   ADD.w d0,4(a1)
  457.   TST.l 4(a1)     ;SKIP IF SOUND NOT LOADED...
  458. ;  TST.L 4(A1,D0.W)
  459.  
  460.   BEQ PNENDA
  461.   SUB.w d0,4(a1)
  462.   MOVE.W DMV,$DFF096
  463.   MOVE.W #$1D0,D2 ;LET DMA CATCH UP...
  464.  
  465. .DF:
  466.   DBF D2,DF
  467.  
  468.   MOVE.l 0(a1),a4
  469.   ADD.w d0,a4
  470. ;  MOVE.L 0(A1,D0.W),(A4,D7.W)
  471.  
  472.   MOVE.l 4(a1),d2
  473.   ADD.w d0,d2
  474. ;  MOVE.L 4(A1,D0.W),D2
  475.  
  476.   LSR.L #1,D2
  477.  
  478.   MOVE.w d2,4(a4)
  479. ;  MOVE.W D2,4(A4,D7.W)
  480.  
  481.   LEA TRX0(PC),A2 ;D1 NOTEVAL + THE TRANSPOSE VALUE...
  482.  
  483.   ADD.w a2,d1
  484.   ADD.w d6,d1
  485. ;  ADD.W (A2,D6.W),D1
  486.  
  487.   ASL.W #1,D1
  488.   LEA PERTAB(PC),A2
  489.  
  490.   ADD.w a2,d1
  491. ;  MOVE.W (A2,D1.W),D1
  492.  
  493.   LEA DETUN0(PC),A3
  494.  
  495.   ADD.w a3,d1
  496.   ADD.w d6,d1
  497. ;  ADD.W (A3,D6.W),D1
  498.  
  499.   MOVE.w d1,6(a4)
  500. ;  MOVE.W D1,6(A4,D7.W)
  501.  
  502.   LEA PERVAL(PC),A2
  503.  
  504.   MOVE.w d1,a2
  505. ;  MOVE.W D1,(A2,D6.W)
  506.  
  507.   ORI.W #$8000,DMV
  508.   MOVE.W DMV,$DFF096
  509.  
  510.   ADD.w d0,12(a1)
  511.   TST.l 12(a1)
  512. ;  TST.L 12(A1,D0.W)
  513.  
  514.   BNE WAVE
  515.   SUB.w d0,12(a1)
  516.  
  517.   MOVE.w #1,4(a4)
  518. ;  MOVE.W #1,4(A4,D7.W)
  519.  
  520.   BRA PNEND
  521.  
  522. .WAVE:
  523.   SUB.w d0,12(a1)
  524.   MOVE.W #$30,D1
  525.  
  526. .DMAWT:
  527.   DBF D1,DMAWT
  528.  
  529.   MOVE.l 12(a1),d1
  530.   ADD.w d0,d1
  531. ;  MOVE.L 12(A1,D0.W),D1
  532.  
  533.   LSR.L #1,D1
  534.  
  535.   MOVE.w d1,4(a4)
  536. ;  MOVE.W D1,4(A4,D7.W)
  537.  
  538.   MOVE.l a1,d1
  539.   ADD.w d0,d1
  540. ;  MOVE.L (A1,D0.W),D1
  541.  
  542.   ADD.l 8(a1),d1
  543.   ADD.w d0,d1
  544. ;  ADD.L 8(A1,D0.W),D1
  545.  
  546.   MOVE.l d1,a4
  547. ;  MOVE.L D1,(A4,D7.W)
  548.  
  549. .PNEND:
  550.   LEA VOL0(PC),A3
  551.  
  552.   MOVE.w a3,8(a4)
  553.   ADD.w d6,8(a4)
  554. ;  MOVE.W (A3,D6.W),8(A4,D7.W)
  555.  
  556. .PNENDA:
  557.   SUB.l d0,4(a1)
  558.   LEA DUR0(PC),A3
  559.   LEA CDUR0(PC),A1
  560.  
  561.   MOVE.w a3,a1
  562.   ADD.w d6,a1
  563. ;  MOVE.W (A3,D6.W),(A1,D6.W)
  564.  
  565.   LEA BF0(PC),A3
  566.  
  567.   ADDI.w #1,(a3)
  568. ;  ADDI.W #1,(A3,D6.W)
  569.  
  570.   RTS
  571.  
  572. ;********** THE PERIOD TABLE **********
  573.  
  574. .PERTAB:
  575.   Dc.w 1712,1616,1520,1440,1360,1280,1200,1136,1072,1016,960,904
  576.   Dc.w 856,808,760,720,680,640,600,568,536,508,480,452
  577.   Dc.w 428,404,380,360,340,320,300,284,268,254,240,226
  578.   Dc.w 214,202,190,180,170,165,150,142,134,127,120,113
  579.   Dc.w 107,101,95,90,85,83,75,71,67,64,60,57  ;TRXPOSE VALS...
  580.   Dc.w 54,51,48,45,43,41,38,36,34,32,30,28
  581.   Dc.w 27,25,24,23,21,20,19,18,17,16,15,14
  582.  
  583. .DMA:
  584.   Dc.w $0001,$0002,$0004,$0008
  585.  
  586. .DMV:
  587.   Dc.w 0
  588.  
  589. ;********** VARIABLES Used IN THE DRIVER **********
  590.  
  591. .TEMPO:
  592.   Dc.w 2
  593.  
  594. .TMCNT:
  595.   Dc.w 0
  596.  
  597. .DUR0:
  598.   Dc.w $10,$10,$10,$10
  599.  
  600. .CDUR0:
  601.   Dc.w 0,0,0,0
  602.  
  603. .GLDUD:
  604.   Dc.w 0,0,0,0
  605.  
  606. .TRX0:
  607.   Dc.w 0,0,0,0
  608.  
  609. .GLDVAL:
  610.   Dc.w 0,0,0,0
  611.  
  612. .PERVAL:
  613.   Dc.w 0,0,0,0
  614.  
  615. .BLK0:
  616.   Dc.w 0,0,0,0
  617.  
  618. .V0:
  619.   Dc.w 0,0,0,0
  620.  
  621. .DETUN0:
  622.   Dc.w 0,0,0,0
  623.  
  624. .SN0:
  625.   Dc.w 0,0,0,0
  626.  
  627. .SONPLAY:
  628.   Dc.w 0
  629.  
  630. .INFCHK:
  631.   Dc.w 0  ;CHECKS FOR ENDLESS LOOPS IN MUSIC...
  632.  
  633. .BF0:
  634.   Dc.w $FF,$FF,$FF,$FF
  635.  
  636. .RP0:
  637.   Dc.w 1,1,1,1
  638.  
  639. .VOL0:
  640.   Dc.w 64,64,64,64
  641.  
  642. .TRK0:
  643.   Dc.l 0
  644.  
  645. .BLOX:
  646.   Dc.l 0
  647.  
  648. .DIGBLOK:
  649.   Dc.l 0
  650.  
  651. .DIGIDAT:
  652.   Dc.l 0
  653.  
  654.